package com.lottemall.item.api;

import com.lottemall.common.dto.CartDTO;
import com.lottemall.common.vo.PageResult;
import com.lottemall.item.pojo.Sku;
import com.lottemall.item.pojo.Spu;
import com.lottemall.item.pojo.SpuDetail;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 在商品微服务公用接口中提供这个接口给需要调用的人
 * 这样由提供方来维护这个接口，需要调用的人就不需要再次编写重复代码
 * 但是这里不需要加@FeignClient("item-service")
 * 因为我们现在的工厂结构是lt-item-service已经引用了lt-item-interface，这个GoodsApi是提供给调用方的，却提供给了自己，这样不合理
 * 所以有两种解决方案
 * 1.这个给调用者的api接口 再次在lt-item中拆分成一个子模块。
 * 2.这个不加@FeignClient("item-service")注解，让调用方继承这个接口的时候在加就好了。
 */
public interface GoodsApi {
    /**
     * 根据商品SpuId查询商品SpuDetail详情
     * @param spuId
     * @return
     */
    @GetMapping("/spu/detail/{id}")
    SpuDetail querySpuDetailById(@PathVariable("id") Long spuId);

    /**
     * 根据spu查询下面所有的sku
     * @param spuId
     * @return
     */
    @GetMapping("/sku/list")
    List<Sku> querySkuBySpuId(@RequestParam("id") Long spuId);
    /**
     * 分页查询Spu抽象商品
     * @param page
     * @param rows
     * @param saleable // 是否上架，0下架，1上架(T　F)
     * @param key
     * @return
     */
    @GetMapping("/spu/page")
    PageResult<Spu> querySpuByPsge(
            @RequestParam(value = "page", defaultValue = "1") Integer page,
            @RequestParam(value = "rows", defaultValue = "5") Integer rows,
            @RequestParam(value = "saleable", required = false) Boolean saleable,
            @RequestParam(value = "key", required = false) String key);

    /**
     * 根据spu的id查询spu
     * @param id
     * @return
     */
    @GetMapping("spu/{id}")
    Spu querySpuById(@PathVariable("id") Long id);


    /**
     * 根据spu的id集合查询所有sku （暂时用于前台购物车根据浏览器存储的skuids来检查商品是否改变）
     * @param ids
     * @return
     */
    @GetMapping("/sku/list/ids")
    List<Sku> querySkuBySpuId(@RequestParam("ids") List<Long> ids);

    /**
     * 减库存
     *
     * @param cartDTOS
     * @return
     */
    @PostMapping("stock/decrease") //Post请求是专门传json的
    void decreaseStock(@RequestBody List<CartDTO> cartDTOS);
}
